Mobile computing devices such as mobile telephones are continuously being equipped with advanced hardware, such as processors that have more processing capabilities than previous processors and an increased amount of memory, that can allow execution of complex/interactive programs thereon. One of the largest obstacles for future growth in mobile computing devices is battery technology. As processors are becoming faster, screens are getting sharper, and devices are being equipped with more sensors, an ability of a mobile computing device to consume energy far outpaces current abilities of batteries to provide energy to such hardware. Unfortunately, technology trends for batteries indicate that these limitations are not going away, and that energy will remain a primary bottleneck for many mobile computing devices.
A conventional technique to reduce energy requirements of mobile computing devices is to cause execution of at least part of a program to occur remotely. In other words, mobile computing devices can take advantage of resource-rich infrastructure devices by transmitting code for execution to remote servers. A conventional approach for offloading code to a remote computing device requires that developers indicate how a program is to be partitioned during development of such program. Additionally, the developers can indicate how to adapt partitioning of a program to changing network conditions. Having programmers dictate which portions of a program are offloaded under certain conditions can lead to relatively large energy savings. Requiring developers, however, to indicate with such granularity how programs are to be partitioned, how states are to be transferred, etc., is a great burden on developers, and can significantly increase development time of applications.
Another conventional approach is to entirely offload a process or virtual machine from the mobile computing device to an infrastructure device. Thus, entire applications or even operating systems can be migrated to a remote device. This approach can reduce the burden on developers, because applications need not be modified to take advantage of remote execution. There is a significant energy cost, however, in entirely migrating a program or operating system from a mobile computing device to an infrastructure device.